#include "pcf8591.h"

static void Delay10Ms()		//@12.000MHz
{
	unsigned char i, j;

	i = 117;
	j = 184;
	do
	{
		while (--j);
	} while (--i);
}

//
void InitPCF8591(void)
{
	I2CStart();
	I2CSendByte(0x90);
	I2CWaitAck();
	I2CSendByte(0x01);  //具体初始化哪个通道还应该根据需求来
	I2CWaitAck();
	I2CStop();
	Delay10Ms();
}

//通道1，光敏电阻电压 0x01   //采集的RD1即光敏电阻的信号
//通道3，可调电阻电压 0x03	 //采集到的为RB2的值 电压值 = 接收值 / 51（或者*0.0196）
unsigned char GetADC(unsigned char channel)
{
	unsigned char temp;
	I2CStart();
	I2CSendByte(0x90);
    I2CWaitAck();
	// I2CSendByte(0x40 | channel);  //倘若仅需采集单通道，并且又进行D/A转换的需求，那么为了防止频繁的标志位转换，可以或上0x40
	I2CSendByte(channel);  //倘若该程序需要采集多个通道的数据，那么为了防止受到D/A转换的影响，就不要将该寄存器第六位设置为1，而是直接将通道号写入寄存器
	I2CWaitAck();
	I2CStart();
	I2CSendByte(0x91);
	I2CWaitAck();
	temp = I2CReceiveByte();
	I2CSendAck(1);
	I2CStop();
	
	return temp;
}

//D/A引脚输出电压值 输入值为 电压值 * 51
void setDAC(unsigned char dat)
{
	I2CStart();          
	I2CSendByte(0x90);    //PCF8591的写设备地址 
	I2CWaitAck();  
	I2CSendByte(0x43);   //输出DAC，转换AIN3 ，具体的取值需要看具体情况
	I2CWaitAck();                 
	I2CSendByte(dat);     //设置DAC电压输出参数
	I2CWaitAck();          //产生非应答信号                 
	I2CStop();
}
